package Demo;

public class Demo_403 {
    public static void main(String[] args) throws InterruptedException {
        //初始化累加对象
        Counter403 counter = new Counter403();

        //创建两个线程对一个变量进行累加
        Thread t1 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        Thread t2 = new Thread(()->{
            //5万次
            for (int i=0;i<50000;i++){
                counter.increase();  //通过counter.increase()方法对counter进行递增操作，每次递增1并循环5万次
            }
        });

        //启动线程
        t1.start();
        t2.start();

        //等待线程执行完成
        t1.join();
        t2.join();

        //查看运行结果
        System.out.println("count ="+counter.count);  //10万次
    }
}
class Counter403{
    //初始值是0
    public int count = 0;
    //累加方法

    public synchronized void increase(){  //当多个线程同时访问和修改共享数据(比如这里的count)时，
        // 对synchronized可以避免数据不一致或者竞争条件等问题。在这个方法中对count进行自增count++是在同步控制下进行的，
        // 保证了操作的原子性和线程的安全性
        count++;
    }

    public void increase1(){
        count++;  //这个方法没有使用synchronized修饰，意味着多个线程可以同时调用并执行这个方法
    }
}